#ifndef _TYPEREGISTER_H_
#define _TYPEREGISTER_H_

#include <SECore/Reflect.h>
#include <glm/glm.hpp>
#include <glm/gtc/quaternion.hpp>


#include <SEngine/Ecs/Components/TransformComp.h>
#include <SEngine/Ecs/Components/LightComp.h>
#include <SEngine/Ecs/Components/ModelRenderComp.h>
#include <SEngine/Ecs/Components/NameComp.h>
#include <SEngine/Ecs/Components/UuidComp.h>
#include <SEngine/Ecs/Components/ScriptComp.h>
#include <SEngine/Ecs/Components/CameraComp.h>
#include <SEngine/Ecs/Components/RigidBodyComp.h>
#include <SEngine/Ecs/Components/AnimationComp.h>
#include <SEngine/Ecs/Components/HDRSkyboxComp.h>
#include <SEngine/Ecs/Components/DynamicSkyboxComp.h>


namespace SEngine
{
    using AllComponents = TypesLoader<
        TransformComp,
        PointLightComp,
        DirectLightComp,
        AmbientLightSphereComp,
        ModelRenderComp,
        NameComp,
        UuidComp,
        ScriptComp,
        CameraComp,
        RigidBodyComp,
        HDRSkyboxComp,
        DynamicSkyboxComp
    >;

}

namespace glm {
    REF_REGISTER_CLASS(vec1,
        REF_REGISTER_FIELD(glm::vec1, x)
    )

    REF_REGISTER_CLASS(vec2,
        REF_REGISTER_FIELD(glm::vec2, x),
        REF_REGISTER_FIELD(glm::vec2, y)
    )

    REF_REGISTER_CLASS(vec3,
        REF_REGISTER_FIELD(glm::vec3, x),
        REF_REGISTER_FIELD(glm::vec3, y),
        REF_REGISTER_FIELD(glm::vec3, z)
    )

    REF_REGISTER_CLASS(vec4,
        REF_REGISTER_FIELD(glm::vec4, x),
        REF_REGISTER_FIELD(glm::vec4, y),
        REF_REGISTER_FIELD(glm::vec4, z),
        REF_REGISTER_FIELD(glm::vec4, w)
    )

    REF_REGISTER_CLASS(quat,
        REF_REGISTER_FIELD(glm::quat, x),
        REF_REGISTER_FIELD(glm::quat, y),
        REF_REGISTER_FIELD(glm::quat, z),
        REF_REGISTER_FIELD(glm::quat, w)
    )
}






#endif